/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package SwingForms;

import LogicaClasesNew.Fabrica;
import LogicaClasesNew.IcontroladorCliente;
import LogicaClasesNew.IcontroladorProveedor;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.util.Arrays;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class frmUsuario extends javax.swing.JInternalFrame {

    //Necesario Para el Calendario
    DateFormat VariableFecha = DateFormat.getDateInstance();

    //Interfaz Cliente
    private IcontroladorCliente ICC;
    //Interfaz Proveedor
    private IcontroladorProveedor ICP;
    //Necesario para la imagen
    FileInputStream archivo = null;
    int longitudBytes = 0;

    byte[] fileContent = null;
    Image foto = null;

    /**
     * Creates new form frmUsuario
     */
    public frmUsuario() {

        //Obtengo la fabrica
        Fabrica fabrica = Fabrica.getInstance();
        this.ICC = fabrica.getControladorCliente();
        this.ICP = fabrica.getControladorProveedor();
        initComponents();

        //INICIALIZO FABRICA POR UNICA VEZ
        //Inicio funcion UpperCase
        KeyListener escucha = new KeyListener() {

            @Override
            public void keyTyped(final KeyEvent e) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        JTextField campo = (JTextField) e.getSource();
                        int posicaoCursor = campo.getCaretPosition();
                        campo.setText(campo.getText().toUpperCase());
                        if (posicaoCursor != campo.getCaretPosition()) {
                            campo.setCaretPosition(posicaoCursor);
                        }
                    }
                });
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }
        };  //FIN KeyListener escucha

        //cargo los TextFields con la funcion de convertir TODO a mayuscula
        JTF_UsuarioNickName.addKeyListener(escucha);
        JTF_UsuarioNombre.addKeyListener(escucha);
        JTF_UsuarioApellido.addKeyListener(escucha);
        JTF_UsuarioMail.addKeyListener(escucha);
        JTF_UsuarioNombreCompania.addKeyListener(escucha);
        JTF_UsuarioWeb.addKeyListener(escucha);
    }//FIN frmUsuario

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel3 = new javax.swing.JLabel();
        JL_UsuarioNickName = new javax.swing.JLabel();
        JTF_UsuarioNickName = new javax.swing.JTextField();
        JL_UsuarioNombre = new javax.swing.JLabel();
        JTF_UsuarioNombre = new javax.swing.JTextField();
        JL_UsuarioApellido = new javax.swing.JLabel();
        JTF_UsuarioApellido = new javax.swing.JTextField();
        JL_UsuarioFechaNacimiento = new javax.swing.JLabel();
        JL_UsuarioMail = new javax.swing.JLabel();
        JTF_UsuarioMail = new javax.swing.JTextField();
        JL_UsuarioNombreCompania = new javax.swing.JLabel();
        JTF_UsuarioNombreCompania = new javax.swing.JTextField();
        JL_UsuarioWeb = new javax.swing.JLabel();
        JTF_UsuarioWeb = new javax.swing.JTextField();
        JCB_UsuarioPerfil = new javax.swing.JComboBox();
        JL_UsuarioPerfil = new javax.swing.JLabel();
        JB_UsuarioGuardar = new javax.swing.JButton();
        JB_UsuarioCancelar = new javax.swing.JButton();
        JL_UsuariosCamposObligaotorios = new javax.swing.JLabel();
        JB_UsuarioSalir = new javax.swing.JButton();
        JDC_UsuarioCalendario = new com.toedter.calendar.JDateChooser();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jPassword = new javax.swing.JPasswordField();
        jConfirPassword = new javax.swing.JPasswordField();
        JL_UsuarioFoto = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        jLabel3.setText("jLabel3");

        setTitle("Administracion de Usuarios");

        JL_UsuarioNickName.setText("* NickName:");

        JTF_UsuarioNickName.setForeground(new java.awt.Color(103, 58, 103));
        JTF_UsuarioNickName.setToolTipText("Ingrese un Alias que lo Identificar{a");

        JL_UsuarioNombre.setText("* Nombre:");

        JTF_UsuarioNombre.setForeground(new java.awt.Color(103, 58, 103));
        JTF_UsuarioNombre.setToolTipText("Ingrese su Nombre");
        JTF_UsuarioNombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_UsuarioNombreKeyTyped(evt);
            }
        });

        JL_UsuarioApellido.setText("* Apellido:");

        JTF_UsuarioApellido.setForeground(new java.awt.Color(103, 58, 103));
        JTF_UsuarioApellido.setToolTipText("Ingrese su apellido");
        JTF_UsuarioApellido.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_UsuarioApellidoKeyTyped(evt);
            }
        });

        JL_UsuarioFechaNacimiento.setText("*Fecha de Nacimiento:");

        JL_UsuarioMail.setText("*Correo  electronico:");

        JTF_UsuarioMail.setForeground(new java.awt.Color(103, 58, 103));
        JTF_UsuarioMail.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_UsuarioMailKeyTyped(evt);
            }
        });

        JL_UsuarioNombreCompania.setText("*Nombre de Compañia:");

        JTF_UsuarioNombreCompania.setForeground(new java.awt.Color(103, 58, 103));
        JTF_UsuarioNombreCompania.setEnabled(false);
        JTF_UsuarioNombreCompania.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JTF_UsuarioNombreCompaniaActionPerformed(evt);
            }
        });
        JTF_UsuarioNombreCompania.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_UsuarioNombreCompaniaKeyTyped(evt);
            }
        });

        JL_UsuarioWeb.setText("*Link de Web:");

        JTF_UsuarioWeb.setForeground(new java.awt.Color(103, 58, 103));
        JTF_UsuarioWeb.setEnabled(false);
        JTF_UsuarioWeb.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_UsuarioWebKeyTyped(evt);
            }
        });

        JCB_UsuarioPerfil.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Perfil de Usuario", "Cliente", "Proveedor" }));
        JCB_UsuarioPerfil.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JCB_UsuarioPerfilActionPerformed(evt);
            }
        });

        JL_UsuarioPerfil.setText("*Perfil:");

        JB_UsuarioGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Guardar.png"))); // NOI18N
        JB_UsuarioGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_UsuarioGuardarActionPerformed(evt);
            }
        });

        JB_UsuarioCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Cancelar.png"))); // NOI18N
        JB_UsuarioCancelar.setToolTipText("Limpia todos los Campos");
        JB_UsuarioCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_UsuarioCancelarActionPerformed(evt);
            }
        });

        JL_UsuariosCamposObligaotorios.setForeground(new java.awt.Color(255, 153, 153));
        JL_UsuariosCamposObligaotorios.setText("*Campos Obligatorios");

        JB_UsuarioSalir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Cerrar.png"))); // NOI18N
        JB_UsuarioSalir.setToolTipText("Cierra Ventana");
        JB_UsuarioSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_UsuarioSalirActionPerformed(evt);
            }
        });

        JDC_UsuarioCalendario.setForeground(new java.awt.Color(103, 58, 103));

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CompleteTodCampos.png"))); // NOI18N

        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel2.setText("*Contraseña:");

        jLabel4.setText("*Confirmar Contraseña:");

        jPassword.setText("JPasswordTextField");

        jConfirPassword.setText("JPasswordTextField");
        jConfirPassword.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jConfirPasswordActionPerformed(evt);
            }
        });

        JL_UsuarioFoto.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(102, 102, 102), 1, true));

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Foto.png"))); // NOI18N
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(JL_UsuarioWeb)
                                .addComponent(JL_UsuarioNombreCompania)
                                .addComponent(JL_UsuarioFechaNacimiento)
                                .addComponent(JL_UsuarioApellido)
                                .addComponent(JL_UsuarioNombre)
                                .addComponent(JL_UsuarioNickName)
                                .addComponent(JL_UsuarioMail, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addComponent(jLabel4))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(JDC_UsuarioCalendario, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addComponent(JTF_UsuarioNombre, javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(JTF_UsuarioApellido, javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(JTF_UsuarioMail, javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(JTF_UsuarioNombreCompania, javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(JTF_UsuarioWeb, javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                            .addComponent(JTF_UsuarioNickName, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 60, Short.MAX_VALUE)
                                            .addComponent(JL_UsuarioPerfil)
                                            .addGap(18, 18, 18)
                                            .addComponent(JCB_UsuarioPerfil, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGroup(layout.createSequentialGroup()
                                            .addComponent(JB_UsuarioGuardar)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                            .addComponent(JB_UsuarioCancelar)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                            .addComponent(JB_UsuarioSalir)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                            .addComponent(JL_UsuariosCamposObligaotorios))))
                                .addGap(18, 18, 18)
                                .addComponent(JL_UsuarioFoto, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addContainerGap(33, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jConfirPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jButton1)
                                .addGap(60, 60, 60))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(3, 3, 3)
                        .addComponent(jLabel1)
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(54, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(JL_UsuarioNickName)
                                    .addComponent(JTF_UsuarioNickName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(JCB_UsuarioPerfil, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(JL_UsuarioPerfil))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(JL_UsuarioNombre)
                                    .addComponent(JTF_UsuarioNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(JL_UsuarioApellido)
                                    .addComponent(JTF_UsuarioApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(JL_UsuarioFechaNacimiento)
                                        .addGap(17, 17, 17))
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                        .addComponent(JDC_UsuarioCalendario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(JL_UsuarioMail)
                                    .addComponent(JTF_UsuarioMail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(3, 3, 3)
                                .addComponent(JL_UsuarioFoto, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(jPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(14, 14, 14)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jConfirPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel4)))
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(JTF_UsuarioNombreCompania, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(JL_UsuarioNombreCompania))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(JL_UsuarioWeb)
                    .addComponent(JTF_UsuarioWeb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(60, 60, 60)
                        .addComponent(JL_UsuariosCamposObligaotorios)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(JB_UsuarioCancelar)
                            .addComponent(JB_UsuarioGuardar)
                            .addComponent(JB_UsuarioSalir))
                        .addGap(22, 22, 22))))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    //GUARDAR
    private void JB_UsuarioGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_UsuarioGuardarActionPerformed
        //VALIDACIONES... 
        /*________campos vacios________*/

        //...NickName
        if (JTF_UsuarioNickName.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un NickName");
            JTF_UsuarioNickName.requestFocusInWindow();
            return;
        }
        //perfil
        if (JCB_UsuarioPerfil.getSelectedIndex() == 0) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe seleccionar un perfil");
            JCB_UsuarioPerfil.requestFocusInWindow();
            return;
        }
        //...Nombre
        if (JTF_UsuarioNombre.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un Nombre(s)");
            JTF_UsuarioNombre.requestFocusInWindow();
            return;
        }
        //...Apellido
        if (JTF_UsuarioApellido.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un Apellido(s)");
            JTF_UsuarioApellido.requestFocusInWindow();
            return;
        }
        //...Calendario
        if (JDC_UsuarioCalendario.getDate() == null) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe seleccionar una Fecha");
            JDC_UsuarioCalendario.requestFocusInWindow();
            return;
        }
        //...Mail
        if (JTF_UsuarioMail.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un Mail");
            JTF_UsuarioMail.requestFocusInWindow();
            return;
        }

        //Validacion de Contrasena correcta
        char[] inputPsswd = jPassword.getPassword();
        char[] inputConfirmaPsswd = jConfirPassword.getPassword();
        if (Arrays.equals(inputPsswd, inputConfirmaPsswd)) {
            JOptionPane.showMessageDialog(null, "Correcta confirmacion de contraseñas", "Ingreso de contraseña", JOptionPane.INFORMATION_MESSAGE);
        } else {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Confirmacion de contraseñas incorrecta. Ingrese nuevamente", "Password mismatching", JOptionPane.ERROR_MESSAGE);
            JTF_UsuarioMail.requestFocusInWindow();
            return;
        }

        //Nombre de Compañia & Web
        if (JCB_UsuarioPerfil.getSelectedIndex() == 2) {

            if (JTF_UsuarioNombreCompania.getText().isEmpty()) {
                getToolkit().beep();
                JOptionPane.showMessageDialog(null, "Debe digitar un Nombre de Compañia");
                JTF_UsuarioNombreCompania.requestFocusInWindow();
                return;
            }

            if (JTF_UsuarioWeb.getText().isEmpty()) {
                getToolkit().beep();
                JOptionPane.showMessageDialog(null, "Debe digitar la pagina web");
                JTF_UsuarioWeb.requestFocusInWindow();
                return;
            }

        }
        /*..............................................................*/

        /*________________________________________*/
        //Validar EMAIL (haber ingresado un @ y un . )
        if (!isEmail(JTF_UsuarioMail.getText())) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(this, "Mail No valido", "Validar Mail", JOptionPane.ERROR_MESSAGE);
            JTF_UsuarioMail.requestFocusInWindow();
            return;
        }

        /*..............................................................*/
        //CALENDARIO  ... dd/mm/yy
        String fecha = VariableFecha.format(JDC_UsuarioCalendario.getDate());

        if ((ICC.findCliente(JTF_UsuarioNickName.getText()) == null) && (ICP.findProveedor(JTF_UsuarioNickName.getText()) == null)) {

        //Consulto tipo de perfil
            //Pasamos el array de password a string para guardarlo OK en BD, sino nos los guardaba como caracteres simbolicos
            //Utilizamos StringBuffer para realizar esto, y luego le realizamos un .toString para crear el proveedor.
            char[] passwd = jPassword.getPassword();
            StringBuffer cadena = new StringBuffer();
            for (int x = 0; x < passwd.length; x++) {
                cadena = cadena.append(passwd[x]);
            }

            if (JCB_UsuarioPerfil.getSelectedIndex() == 1) { //cliente

                if (fileContent == null){
                    //Creo objeto Cliente
                    ICC.createCliente(JTF_UsuarioNickName.getText(), JTF_UsuarioNombre.getText(), JTF_UsuarioApellido.getText(), fecha, cadena.toString() , JTF_UsuarioMail.getText());
                    JOptionPane.showMessageDialog(this, "Cliente "+ JTF_UsuarioNickName.getText() + "\n Creado exitosamente", "Creado",JOptionPane.INFORMATION_MESSAGE);
                    
                    }else{
                        
                    //Creo objeto Cliente
                    
                    ICC.createCliente2 (JTF_UsuarioNickName.getText(), JTF_UsuarioNombre.getText(), JTF_UsuarioApellido.getText(), fecha, cadena.toString() , JTF_UsuarioMail.getText(), fileContent );
                    JOptionPane.showMessageDialog(this, "Cliente "+ JTF_UsuarioNickName.getText() + "\n Creado exitosamente", "Creado",JOptionPane.INFORMATION_MESSAGE);
                    }

            } else if (JCB_UsuarioPerfil.getSelectedIndex() == 2) { //proveedor

                //Creo el objeto proovedor
                try {
                    if (fileContent == null){    
                    ICP.createProveedor(JTF_UsuarioNombreCompania.getText(), JTF_UsuarioWeb.getText(), JTF_UsuarioNickName.getText(), JTF_UsuarioNombre.getText(), JTF_UsuarioApellido.getText(), fecha, cadena.toString(), JTF_UsuarioMail.getText());
                    JOptionPane.showMessageDialog(this, "Proveedor " + JTF_UsuarioNickName.getText() + "\n Creado exitosamente", "Creado", JOptionPane.INFORMATION_MESSAGE);
                     }else{
                        
                    //Creo objeto Cliente
                    
                    ICP.createProveedor2(JTF_UsuarioNombreCompania.getText(), JTF_UsuarioWeb.getText(), JTF_UsuarioNickName.getText(), JTF_UsuarioNombre.getText(), JTF_UsuarioApellido.getText(), fecha, cadena.toString(), JTF_UsuarioMail.getText(), fileContent);
                    JOptionPane.showMessageDialog(this, "Proveedor " + JTF_UsuarioNickName.getText() + "\n Creado exitosamente", "Creado", JOptionPane.INFORMATION_MESSAGE);
                    }
                    } catch (Exception t) { //CAPTURA EL ERROR
                    getToolkit().beep();
                    JOptionPane.showMessageDialog(null, t.getMessage());
                }
            }

            //AL GUARDAR lo oculto        
            this.setVisible(false);

        } else {
            JOptionPane.showMessageDialog(this, "Ya existe un usuario registrado con el nickname " + JTF_UsuarioNickName.getText());

        }
    }//GEN-LAST:event_JB_UsuarioGuardarActionPerformed

    //PERFIL
    private void JCB_UsuarioPerfilActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JCB_UsuarioPerfilActionPerformed

        if (JCB_UsuarioPerfil.getSelectedIndex() == 2) {
            //si es Proveedor... activo las casillas
            JTF_UsuarioNombreCompania.setEnabled(true);
            JTF_UsuarioWeb.setEnabled(true);
        } else {
            //Sino.. q esten desactivadas..
            JTF_UsuarioNombreCompania.setEnabled(false);
            JTF_UsuarioWeb.setEnabled(false);
        }
    }//GEN-LAST:event_JCB_UsuarioPerfilActionPerformed

    //CANCELAR
    private void JB_UsuarioCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_UsuarioCancelarActionPerformed

        //Limpia todos los campos
        JTF_UsuarioNickName.setText("");
        JTF_UsuarioNombre.setText("");
        JTF_UsuarioApellido.setText("");
        JTF_UsuarioMail.setText("");
        JTF_UsuarioNombreCompania.setText("");
        JTF_UsuarioWeb.setText("");

        JCB_UsuarioPerfil.setSelectedIndex(0);

        JL_UsuarioMail.setIcon(null);

        //Hace Foco
        JTF_UsuarioNickName.requestFocus();

    }//GEN-LAST:event_JB_UsuarioCancelarActionPerformed

    //CIERRA
    private void JB_UsuarioSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_UsuarioSalirActionPerformed
        //Oculta formulario
        this.setVisible(false);
    }//GEN-LAST:event_JB_UsuarioSalirActionPerformed

    /*_______________UpperCase______SoloLetras_______________*/
    //NOMBRE solo admite letras
    private void JTF_UsuarioNombreKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_UsuarioNombreKeyTyped
        //evt es el evento provocado
        char c = evt.getKeyChar();
        //Convertimos a char la tecla que se haya pulsado
        if (Character.isDigit(c)) {
            //Se pregunta si es digito
            getToolkit().beep();
            //piiiippp...!!
            evt.consume();
            //lo frena..
        }
    }//GEN-LAST:event_JTF_UsuarioNombreKeyTyped

    //EVENTO APELLIDO
    private void JTF_UsuarioApellidoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_UsuarioApellidoKeyTyped
        //evt es el evento provocado
        char c = evt.getKeyChar();
        if (Character.isDigit(c)) {
            getToolkit().beep();
            evt.consume();
        }
    }//GEN-LAST:event_JTF_UsuarioApellidoKeyTyped

    //EVENTO NOMBRE COMPAÑIA
    private void JTF_UsuarioNombreCompaniaKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_UsuarioNombreCompaniaKeyTyped
        // TODO add your handling code here:
        //evt es el evento provocado
        char c = evt.getKeyChar();
        //Convertimos a char la tecla que se haya pulsado
        if (Character.isDigit(c)) {
            //Se pregunta si es digito
            getToolkit().beep();
            //piiiippp...!!
            evt.consume();
            //lo frena..
        }
    }//GEN-LAST:event_JTF_UsuarioNombreCompaniaKeyTyped

    //EVENTO WEB
    private void JTF_UsuarioWebKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_UsuarioWebKeyTyped
        // TODO add your handling code here:
        //evt es el evento provocado
        char c = evt.getKeyChar();
        //Convertimos a char la tecla que se haya pulsado
        if (Character.isDigit(c)) {
            //Se pregunta si es digito
            getToolkit().beep();
            //piiiippp...!!
            evt.consume();
            //lo frena..
        }
    }//GEN-LAST:event_JTF_UsuarioWebKeyTyped


    private void JTF_UsuarioMailKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_UsuarioMailKeyTyped
        //
    }//GEN-LAST:event_JTF_UsuarioMailKeyTyped

    private void jConfirPasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jConfirPasswordActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jConfirPasswordActionPerformed

    private void JTF_UsuarioNombreCompaniaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JTF_UsuarioNombreCompaniaActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_JTF_UsuarioNombreCompaniaActionPerformed

    //foto
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        
        
                // CARGA la foto desde la computadora
        JL_UsuarioFoto.setIcon(null);
        
        JFileChooser j=new JFileChooser();
        j.setFileSelectionMode(JFileChooser.FILES_ONLY);//solo archivos y no carpetas
        
        int estado=j.showOpenDialog(null); //Abre la ventana de busqueda centrada
        
        if(estado== JFileChooser.APPROVE_OPTION){ //Si es el tipo de archivo q quiero...
            
            try{
                archivo =new FileInputStream(j.getSelectedFile());
                //necesitamos saber la cantidad de bytes
                this.longitudBytes=(int)j.getSelectedFile().length();
                
                try {
                    
                    //Guarda al imagen tipo Image llamada icono, ajustada al tamaño del Label
                    foto = ImageIO.read(j.getSelectedFile()).getScaledInstance
                            (JL_UsuarioFoto.getWidth(),JL_UsuarioFoto.getHeight(),Image.SCALE_DEFAULT); 
                    //Carga la imagen en el Label
                    JL_UsuarioFoto.setIcon(new ImageIcon(foto));
                    
                    JL_UsuarioFoto.updateUI(); //Resetea las propiedades UI con los valores catuales de la vista
        
                   //Cargo mi byte[] con la imagen
                     fileContent = obtenerBytes(archivo, longitudBytes);
                    
                    
                    //SI ME INTERESA SABER LA RUTA... <<<------------------------<-<--<---------------<--<-----------
                    //File file = j.getSelectedFile();
                    //String ruta = String.valueOf(file);
                    
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(rootPane, "imagen: "+ex);
                }
            }catch(FileNotFoundException ex){
                ex.printStackTrace();
            }
        }  

    }//GEN-LAST:event_jButton1ActionPerformed

    //EVENTO limita SOLO LETRAS
    public void keyTyped(KeyEvent ke) {

        char c = ke.getKeyChar();

        if (Character.isDigit(c)) {
            getToolkit().beep();

            ke.consume();

            JOptionPane.showMessageDialog(this, "error \n" + c);

        }
    }

    //METODO para validar MAIL
    public boolean isEmail(String correo) {
        if ((correo.indexOf("@") == -1) || (correo.indexOf(".") == -1)) {
            return false;
        }
        return true;
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton JB_UsuarioCancelar;
    private javax.swing.JButton JB_UsuarioGuardar;
    private javax.swing.JButton JB_UsuarioSalir;
    private javax.swing.JComboBox JCB_UsuarioPerfil;
    private com.toedter.calendar.JDateChooser JDC_UsuarioCalendario;
    private javax.swing.JLabel JL_UsuarioApellido;
    private javax.swing.JLabel JL_UsuarioFechaNacimiento;
    private javax.swing.JLabel JL_UsuarioFoto;
    private javax.swing.JLabel JL_UsuarioMail;
    private javax.swing.JLabel JL_UsuarioNickName;
    private javax.swing.JLabel JL_UsuarioNombre;
    private javax.swing.JLabel JL_UsuarioNombreCompania;
    private javax.swing.JLabel JL_UsuarioPerfil;
    private javax.swing.JLabel JL_UsuarioWeb;
    private javax.swing.JLabel JL_UsuariosCamposObligaotorios;
    private javax.swing.JTextField JTF_UsuarioApellido;
    private javax.swing.JTextField JTF_UsuarioMail;
    private javax.swing.JTextField JTF_UsuarioNickName;
    private javax.swing.JTextField JTF_UsuarioNombre;
    private javax.swing.JTextField JTF_UsuarioNombreCompania;
    private javax.swing.JTextField JTF_UsuarioWeb;
    private javax.swing.JButton jButton1;
    private javax.swing.JPasswordField jConfirPassword;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPasswordField jPassword;
    // End of variables declaration//GEN-END:variables

    private void and(boolean b) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
    private static byte[] obtenerBytes(InputStream is,int capacidad) 
       { 
           DataInputStream dis=new DataInputStream(is); 
           byte[] bytes=new byte[capacidad];//para la capacidad del array 
           try 
           { 
               dis.readFully(bytes); 
               if(dis!=null) 
                   dis.close(); 
           } 
           catch(java.io.IOException ioe) 
           { 
               ioe.printStackTrace(); 
           } 
           return bytes; 
       } 
    
   
}

    

